package com.zmn.mcc.persistence.interfaces.menu;

import com.zmn.mcc.model.entity.menu.McMenu;
import com.zmn.mcc.model.entity.menu.McMenuQuery;

import java.util.Date;
import java.util.List;


/**
 * 描述: 菜单配置表数据库访问
 *
 * @author guoqiao
 * @since 2021-05-28 16:23:56
 */
public interface MenuDao {

    /**
     * 描述: 根据id查询数据
     *
     * @param menuId id
     * @return McMenu
     * @author guoqiao
     * @since 2021-05-28 16:23:56
     */
    McMenu findById(Integer menuId);

    /**
     * 描述: 按条件查询数据 支持分页
     *
     * @param query 查询对象
     * @return List<McMenu>
     * @author guoqiao
     * @since 2021-05-28 16:23:56
     */
    List<McMenu> listPageByQuery(McMenuQuery query);

    /**
     * 描述: 按条件查询数据 不支持分页
     *
     * @param query 查询对象
     * @return List<McMenu>
     * @author guoqiao
     * @since 2021-05-28 16:23:56
     */
    List<McMenu> listByQuery(McMenuQuery query);

    List<McMenu> listByQuery_copy(McMenuQuery query);

    /**
     * 描述: 根据父级查询子集集合
     *
     * @param parentId 父级目录id
     * @param status   状态
     * @return com.zmn.mcc.model.entity.menu.McMenu
     * @author jiafei
     * @since 2021/6/2 17:27
     */
    List<McMenu> findByParentIdAndStatus(Integer parentId, Integer status);

    /**
     * 描述: 根据查询条件统计满足条件的数据条数
     *
     * @param query 查询对象
     * @return Integer
     * @author guoqiao
     * @since 2021-05-28 16:23:56
     */
    Integer countByQuery(McMenuQuery query);

    /**
     * 描述: 根据id修改数据 id为必传
     *
     * @param menu 待修改数据
     * @return java.lang.Integer
     * @author guoqiao
     * @since 2021-05-28 16:23:56
     */
    Integer updateByKey(McMenu menu);

    /**
     * 描述: 根据主键修改状态
     *
     * @param ids      主管ID集合
     * @param status   状态
     * @param operator 操作人
     * @param now      修改时间
     * @author guoqiao
     * @since 2020-08-24 15:10
     */
    void updateStatusBatch(List<Integer> ids, Integer status, String operator, Date now);

    /**
     * 描述: 根据url集合修改状态（权限状态变更时调用）
     *
     * @param permitUrls 权限url集合
     * @param status 状态
     * @param updater 修改人
     * @author guoqiao
     * @since 2021/6/21 16:39
     */
    void updateStatusByPermitUrls(List<String> permitUrls, Integer status, String updater);

    /**
     * 描述: 新增数据
     *
     * @param menu 待新增数据
     * @return java.lang.Integer 主键key
     * @author guoqiao
     * @since 2021-05-28 16:23:56
     */
    Integer insert(McMenu menu);

    /**
     * 描述: 根据主键删除数据
     *
     * @param menuId 主管ID集合
     * @return java.lang.Integer
     * @author guoqiao
     * @since 2021-05-28 16:23:56
     */
    Integer deleteByKey(Integer menuId);


}
